使用 JMS 的 Java 下载自动更新 Oracle JDK

要使 Java 保持最新状态,需要使用最新的 Java 功能版本或 Java 修补程序版本,这些版本可用于构建工具、CI/CD 管道、Docker 镜像、容器或应用程序。Java 的自动配置需要根据策略、规则和规范选择正确的版本,无需人工干预。例如,Maven 和 Gradle 等构建工具配置为自动检测本地文件系统中的 Java 运行时,但没有自动更新 Oracle JDK 的功能(如果它不是最新的)。另一个例子是 Dockerfile,它包含用于组装容器镜像的指令的文本文件。通常,Dockerfile 包含特定版本的 URL,为了使用最新版本保持更新,需要在每次新版本发布后手动更新该文件。

根据 无费用条款和条件 (NFTC) 提供的最新 Oracle JDK 版本更新的下载可以通过 Java 下载页面上的脚本友好型下载 URL 自动化,只要它们是在这些条款下提供的,但较早版本(如 Java 8 和 11)的更新下载(从 2024 年 10 月开始,Java 17)根据 Oracle 技术网络 (OTN) 许可 条款提供,无法从 oracle.com/javadownload 轻松自动化,因为访问这些版本需要用户使用 Oracle 帐户登录并每次都接受许可条款。

为了允许自动下载较旧 Oracle JDK 版本的更新,Oracle 于 2023 年 11 月通过 Oracle 云基础设施 (OCI) 上的 Java 管理服务 (JMS) 推出了 Java 下载服务。此功能旨在满足 Java 开发人员、管理员和软件提供商的需求。JMS 的 Java 下载通过允许对所有受支持的 JDK 版本(包括根据 Oracle 技术网络 (OTN) 许可证需要许可证接受的版本)进行脚本友好的下载,提供了更多选择。JMS 及其脚本友好型下载功能,使用基于令牌的身份验证,方便在您的自动化构建和部署系统中无缝使用最新的 Java 版本。

用于身份验证和许可证接受的令牌

身份验证令牌通过消除每次交互都需要登录的需要,简化了用户对云服务的访问。在 JMS Java 下载的背景下,令牌在促进脚本和 Dockerfile 中所有 Java 版本的自动下载方面发挥着至关重要的作用。这些令牌由 JMS 管理员在接受适用的许可条款后创建,允许使用脚本友好的下载命令。下载请求需经 JMS Java 下载服务器验证关联的令牌。

Java 下载允许管理员为每个 Java 版本生成唯一的令牌。每个令牌的有效期可自定义,可以是数年。生成的令牌可以分发给组织内的所有用户,即使是那些没有 OCI 帐户的用户,也可以在将下载最新版本的 JDK 的应用程序和脚本中使用。

令牌生成和下载流程在下面的功能工作流程中进行了描述。

Oracle JDK download functional workflow

JMS Java 下载为 JMS 管理员提供了一个令牌管理界面,用于在 JMS 控制台中创建、撤销和更新令牌,可以通过 OCI 帐户访问。如果您不熟悉 OCI,可以创建一个 Oracle 云免费层 帐户,该帐户允许永久访问 JMS,并包括对所有 OCI 服务的有限时试用。试用期包括 300 美元的云积分,有效期最长 30 天。您可以将这些积分用于任何符合条件的 Oracle 云基础设施服务。JMS 免费使用(尽管如果您超过始终免费的存储限制,您可能会产生一些数据存储费用),因此您可以在试用期结束后继续使用您的 OCI 帐户管理和使用 JMS 下载令牌。

Oracle 云基础设施可从 24 个国家/地区的 48 个公共云区域 获得。JMS Java 下载服务允许您从任何区域创建令牌和下载 Java。这使开发人员和系统管理员可以选择最靠近下载 JDK 系统的位置,并符合数据本地化要求。

默认情况下,令牌在该 Oracle JDK 版本的更新根据当前条款提供时有效。这意味着根据无费用条款和条件提供的较新版本将为 LTS 版本提供长达 3 年,而根据 Java SE OTN 许可条款提供的版本将提供到支持生命周期结束 (EOSL) 日期。如果管理员首先接受新条款,则仅当管理员首先接受新条款时,才能延长达到许可证许可结束日期的 NTFC 版本的令牌,以继续访问根据新许可条款提供的较新更新。

下载报告

Java 下载有一个报告部分,允许查看使用每个令牌的所有 JDK 下载。下载报告根据各种标准(如 Java 版本、特定版本下的版本、操作系统、体系结构等)提供下载数量的细分。控制台提供深入挖掘功能,可以深入了解详细的下载信息,一直到单个下载的 JDK 二进制文件。报告也可以以 CSV 格式下载。

可脚本化下载的实际应用

JMS 的 Java 下载提供的可脚本化下载功能为参与 Java 发现和下载的工具、库、插件、CI/CD 管道和浏览器扩展打开了新的可能性。此功能使最新 Oracle JDK 版本的自动配置成为可能,解决了各种用例,其中一些用例概述如下。

在 Maven/Gradle 中自动下载/自动配置 Oracle JDK

Maven 和 Gradle 都支持根据工具链/构建配置文件自动检测 Java。自动检测需要手动下载 JDK 并将其存储在本地。Maven 和 Gradle 都不支持自动下载或自动配置 Oracle JDK。但是,Maven 和 Gradle 都具有支持 Oracle 的 OpenJDK 构建的自动下载/自动配置的外部插件。同样,JMS 中的可脚本化下载可用于支持 Oracle JDK 的自动下载。

始终最新的 Dockerfile

Dockerfile 包含创建容器镜像的指令。Java 下载提供启动/示例 Dockerfile,这些 Dockerfile 使用在创建镜像时可用的最新 Oracle JDK 更新构建容器镜像。这些镜像使用 Oracle Linux 8 作为基本层(因为它们是示例文件),可以修改为使用任何所需的版本。

JMS 提供两种类型的 Dockerfile

  1. 使用“当前版本”的 Dockerfile:建议大多数用户使用此方法,因为它将使用最新版本的 Java 创建镜像。这些文件将检索所选 Java 版本的最新版本。例如,想要 JDK 21 的用户将在 2024 年 4 月之前获得 21.0.2,然后在 2024 年 7 月之前获得 21.0.3,然后获得 21.0.4 等等……

  2. 来自存档版本的 Dockerfile:这些 Dockerfile 检索特定更新版本。当需要特定 JDK 版本时,这很有用。用户可以指定 21.0.2,即使在发布 21.0.3 之后,也会获得该确切版本。仅当需要过时的 Java 版本时,才建议使用这些 Dockerfile,例如调试旧版本上的问题。

在 CI/CD 管道中自动执行 JDK 下载

脚本友好的下载命令可以有效地用于 CI/CD 工具,以确保管道始终下载具有最新安全修复程序的最新 JDK 版本,无需人工干预。例如,典型的 CI 构建功能的 Dockerfile 可以包含以下命令来安装 Java 版本

RUN rpm -ivh https://dummy.domain.com/artifactory/jdk/17.0.8/bundles/linux-x64/jdk-17.0.8_linux-x64_bin.rpm

用户需要跟踪最新的 JDK 版本并手动更新版本号。可以使用 JMS 的可脚本化下载自动执行此过程,通过使用以下命令,无需手动跟踪 Oracle JDK 版本和更新 Dockerfile

RUN JAVA_PKG=https://javamanagementservice-download.us-ashburn-1.oci.oraclecloud.com/java/17/latest/jdk-17_linux-x64_bin.rpm;
\ curl -H "token:<your_token_here>" -L --output /tmp/jdk.rpm "$JAVA_PKG";
\ rpm -ivh /tmp/jdk.rpm;

其他资源